package i18n

import (
	"encoding/json"
	"fmt"
	"os"
	"strings"
)

// 支持的语言
const (
	LangEN = "en"    // 英语（默认）
	LangZH = "zh-CN" // 简体中文
)

// Message 定义所有需要国际化的文本
type Message struct {
	// 通用
	OK             string `json:"ok"`
	Error          string `json:"error"`
	Success        string `json:"success"`
	Failed         string `json:"failed"`
	NotFound       string `json:"not_found"`
	InvalidRequest string `json:"invalid_request"`

	// 任务相关
	Task struct {
		Create         string `json:"create"`
		Update         string `json:"update"`
		Delete         string `json:"delete"`
		Enable         string `json:"enable"`
		Disable        string `json:"disable"`
		Name           string `json:"name"`
		Group          string `json:"group"`
		Command        string `json:"command"`
		CronExpr       string `json:"cron_expr"`
		Status         string `json:"status"`
		LastRunTime    string `json:"last_run_time"`
		NextRunTime    string `json:"next_run_time"`
		Description    string `json:"description"`
		CreateSuccess  string `json:"create_success"`
		UpdateSuccess  string `json:"update_success"`
		DeleteSuccess  string `json:"delete_success"`
		EnableSuccess  string `json:"enable_success"`
		DisableSuccess string `json:"disable_success"`
	} `json:"task"`

	// 执行记录相关
	TaskLog struct {
		StartTime string `json:"start_time"`
		EndTime   string `json:"end_time"`
		Duration  string `json:"duration"`
		Output    string `json:"output"`
		Error     string `json:"error"`
		Success   string `json:"success"`
		Failed    string `json:"failed"`
	} `json:"task_log"`

	// Web UI相关
	UI struct {
		Dashboard     string `json:"dashboard"`
		TaskList      string `json:"task_list"`
		TaskLogs      string `json:"task_logs"`
		Settings      string `json:"settings"`
		Login         string `json:"login"`
		Logout        string `json:"logout"`
		Username      string `json:"username"`
		Password      string `json:"password"`
		Submit        string `json:"submit"`
		Cancel        string `json:"cancel"`
		Confirm       string `json:"confirm"`
		DeleteConfirm string `json:"delete_confirm"`
		Search        string `json:"search"`
		NoData        string `json:"no_data"`
		Loading       string `json:"loading"`
	} `json:"ui"`

	// CLI相关
	CLI struct {
		Usage         string `json:"usage"`
		Version       string `json:"version"`
		ImportHelp    string `json:"import_help"`
		ExportHelp    string `json:"export_help"`
		ListHelp      string `json:"list_help"`
		InfoHelp      string `json:"info_help"`
		EnableHelp    string `json:"enable_help"`
		DisableHelp   string `json:"disable_help"`
		NoTasks       string `json:"no_tasks"`
		InvalidTaskID string `json:"invalid_task_id"`
	} `json:"cli"`
}

var (
	messages    = make(map[string]*Message)
	defaultLang = LangEN
)

// InitMessages 初始化多语言消息
func InitMessages() error {
	// 加载英文（默认）
	if err := loadMessages(LangEN); err != nil {
		return fmt.Errorf("failed to load English messages: %v", err)
	}

	// 加载中文
	if err := loadMessages(LangZH); err != nil {
		return fmt.Errorf("failed to load Chinese messages: %v", err)
	}

	return nil
}

// loadMessages 加载指定语言的消息文件
func loadMessages(lang string) error {
	file := fmt.Sprintf("configs/i18n/messages.%s.json", lang)
	data, err := os.ReadFile(file)
	if err != nil {
		return err
	}

	msg := &Message{}
	if err := json.Unmarshal(data, msg); err != nil {
		return err
	}

	messages[lang] = msg
	return nil
}

// GetMessage 获取指定语言的消息实例
func GetMessage(lang string) *Message {
	// 标准化语言代码
	lang = normalizeLang(lang)

	if msg, ok := messages[lang]; ok {
		return msg
	}
	return messages[defaultLang]
}

// normalizeLang 标准化语言代码
func normalizeLang(lang string) string {
	lang = strings.ToLower(lang)
	if strings.HasPrefix(lang, "zh") {
		return LangZH
	}
	return LangEN
}

// DetectLanguage 检测系统语言环境
func DetectLanguage() string {
	lang := os.Getenv("LANG")
	if lang == "" {
		lang = os.Getenv("LANGUAGE")
	}
	if lang == "" {
		lang = os.Getenv("LC_ALL")
	}
	return normalizeLang(lang)
}
